요구사항이 끊임없이 변하고 클라이언트가 원하지 않는 것을 본 후에야 원하는 것을 발견하는 소프트웨어를 수년간 만들어온 후, 실제로 효과가 있는 방법은 다음과 같습니다.
내가 저질렀던 실수들 (당신은 하지 않도록)
실수 #1: 첫 번째 요구사항을 믿기
내가 한 것: 클라이언트가 설명한 대로 정확히 3주를 들여 구축했습니다.
무슨 일이 일어났나: 한 번 보더니 "이건 우리가 의도한 게 아니에요"라고 말했습니다.
배운 것: 첫 번째 요구사항은 대화를 위한 출발점일 뿐입니다. 가능한 가장 작은 버전을 만들어 즉시 보여주세요. 그들의 반응이 어떤 요구사항 문서보다 더 많은 것을 가르쳐줍니다.
실수 #2: 모든 것을 사전에 계획하기
내가 한 것: 마일스톤, 결과물, 의존성이 포함된 상세한 6개월 프로젝트 계획을 만들었습니다.
무슨 일이 일어났나: 3주차에 완전히 방향을 바꿨습니다. 계획은 허구가 되었습니다.
배운 것: 2주 단위로 계획하세요. 목적지에 대한 막연한 아이디어는 가지되, 다음 몇 단계만 상세하게 계획하세요.
실수 #3: "왜"를 기록하지 않기
내가 한 것: 무엇을 만들고 있는지 문서화했지만, 왜 특정 결정을 내렸는지는 기록하지 않았습니다.
무슨 일이 일어났나: 3개월 후: "왜 이렇게 설계했죠?" 아무도 기억하지 못했습니다.
배운 것: 의사결정 로그를 유지하세요:
날짜: 2024-01-15 결정: 이름을 별도 필드에 저장 이유: 다른 언어에 대한 다른 정렬 요구사항 결정자: 클라이언트의 IT 매니저
실수 #4: 아무도 요청하지 않은 기능 만들기
내가 한 것: 사용자들이 좋아할 것 같은 "유용한" 기능들을 추가했습니다.
무슨 일이 일어났나: 그들은 절대 사용하지 않았습니다. 한편, 그들이 실제로 필요로 했던 간단한 것은 없었습니다.
배운 것: 먼저 그들이 요청한 것을 정확히 만드세요. 혁신은 기본을 제공한 후에 옵니다.
실제로 효과가 있는 프로세스
1주차: 탐정 모드
코드를 작성하지 마세요. Jira를 열지 마세요. 그냥 질문하세요:
마법의 질문들: - 지금 무엇을 하고 계신가요? (말 그대로, 단계별로) - 무엇이 가장 오래 걸리나요? - 어떤 실수가 가장 자주 발생하나요? - 마법의 지팡이가 있다면, 고치고 싶은 한 가지는 무엇인가요? - 이것을 누가 또 사용해야 하나요? - 이것이 실패하면 어떻게 되나요?
2주차: 냅킨 테스트
가능한 가장 간단한 다이어그램을 그리세요. 한 페이지 이상이 필요하다면, 너무 복잡한 것입니다.
사용자 로그인 → 대시보드 보기 → 데이터 업데이트 → 리포트 생성 ↓ 데이터베이스에 저장
클라이언트가 이것을 즉시 이해하지 못한다면, 당신이 아직 그들의 요구사항을 이해하지 못한 것입니다.
3주차: 무서운 것부터 먼저 만들기
모든 프로젝트에는 기술적으로 위험한 부분이 하나 있습니다. 아마도:
다국어 PDF 생성
결제 처리
타사 API 통합
실시간 업데이트
그 부분만의 프로토타입을 만드세요. 불가능하다면, 지금 아는 것이 낫습니다.
프로젝트를 살리는 세 가지 목록
목록 1: 이것 없이는 실패
□ 사용자 인증 □ 기본 데이터 입력 □ 핵심 계산/프로세스 □ 간단한 출력/리포트
목록 2: 이것이 좋게 만듦
□ 대량 작업 □ 더 나은 UI □ 자동화된 프로세스 □ 추가 리포트
목록 3: 꿈의 기능
□ AI 예측 □ 모바일 앱 □ 고급 분석 □ 통합
규칙: 목록 1을 출시하세요. 그런 다음, 그때서야 목록 2에서 선택하세요.
매주 추적하는 것들
주간 현실 점검: 1. 무엇을 출시했나요? (작업한 것이 아니라 - 실제로 출시한 것) 2. 사용자들이 실제로 무엇을 사용했나요? 3. 무엇이 그들을 혼란스럽게 했나요? 4. 무엇이 예상보다 오래 걸렸나요? 5. 무엇을 삭제할 수 있나요?
재앙을 예방하는 커뮤니케이션 공식
모든 업데이트는 이 템플릿을 따릅니다:
상태 업데이트 - X주차 ✅ 완료: - 기능 A (현재 라이브) - 이슈 B에 대한 버그 수정 🔄 진행 중: - 기능 C (70% 완료, PDF 생성에서 막힘) ❌ 차단됨: - 대기 중: 클라이언트로부터 API 자격 증명 - 결정 필요: 삭제된 항목을 복구 가능해야 하나요? 📅 다음 주: - 기능 C 완료 - 기능 D 시작 ⚠️ 우려사항: - 데이터베이스가 예상보다 빠르게 증가 - 사용자들이 범위 외 기능 요청
모든 것을 바꾼 교훈들
교훈 1: 혼란은 정보다
클라이언트가 원하는 것을 명확하게 설명할 수 없다면, 그것은 문제가 아니라 데이터입니다. 그들도 여전히 알아가는 중이라는 의미입니다. 작고 틀린 것을 만드세요. 그들의 반응이 모든 것을 명확하게 해줄 것입니다.
교훈 2: 모든 기능은 가설이다
"사용자가 X가 필요하다" 대신, "사용자가 X가 필요할 것으로 믿는다"고 생각하세요. 그런 다음 테스트하세요. 대부분의 가설은 틀립니다. 그게 정상입니다.
교훈 3: 시간 추정은 협상이다
당신의 추정: 2주 당신이 말하는 것: 4주 실제 완료: 3주 모두가 행복합니다.
교훈 4: 데이터베이스는 거짓말하지 않는다
기능에 대해 논쟁하기 전에, 데이터 구조를 보세요:
-- 사용자 테이블에 47개의 컬럼이 있다면, 뭔가 잘못된 것입니다 -- 15개의 조인 테이블이 있다면, 관계가 너무 복잡합니다 -- 스키마를 설명하기 위해 다이어그램이 필요하다면, 사용자들은 앱을 이해하지 못할 것입니다
교훈 5: 추가하는 것보다 삭제를 더 많이
매달 물어보세요: "무엇을 제거할 수 있을까?" 최고의 애플리케이션은 많은 것을 적절하게 하는 것이 아니라, 몇 가지를 탁월하게 합니다.
아무도 말해주지 않는 어려운 진실들
진실 1: 클라이언트는 원하는 것을 모른다
그들은 문제를 알고 있습니다. 해결책은 모릅니다. 그래서 당신을 고용한 것입니다. 명확한 요구사항을 기대하는 것은 환자가 자신의 처방전을 작성하길 기대하는 것과 같습니다.
진실 2: 첫 번째 버전은 틀릴 것이다
예산을 책정하세요. 계획하세요. 자존심을 거기에 걸지 마세요. 버전 1은 대화 시작점이지, 최종 제품이 아닙니다.
진실 3: 간단한 것이 복잡한 것보다 어렵다
기능을 추가하는 것은 쉽습니다. 거절하는 것이 어렵습니다. 최고의 애플리케이션은 누군가가 단순하게 유지하기 위해 싸운 것들입니다.
진실 4: 사용자들은 당신을 놀라게 할 것이다
그들은 당신이 상상하지 못한 방식으로 앱을 사용할 것입니다. 당신이 가장 자랑스러워하는 기능들은 무시할 것입니다. 오후에 만든 것을 좋아할 것입니다.
내 현재 현실 점검 질문들
프로젝트를 시작하기 전에:
비기술적인 친구에게 한 문장으로 설명할 수 있나요?
2주 안에 유용한 것을 출시할 수 있나요?
사용자를 행복하게 만들 가장 작은 것은 무엇인가요?
무엇을 만들지 않을 것인가요? (이 목록은 우리가 만들 것보다 길어야 합니다)
현실에서 살아남는 계획 접근법
한 페이지 계획 문제: [한 문장 - 무엇이 아픈가?] 성공은 다음과 같다: [관찰 가능하고 측정 가능한 결과] 1-2주차: [가장 작은 유용한 것] 3-4주차: [사용하기 덜 고통스럽게 만들기] 5-6주차: [가장 많이 요청된 기능 추가] 절대 하지 않을 것: - 기능 확장 항목들 - 있으면 좋은 것들 - "이러면 멋질 것 같은데..." 류 막혔을 때 물어보기: "가장 간단한 해결책은 무엇인가?" "1주밖에 없다면 무엇을 만들 것인가?" "사용자들은 이것 없이 무엇을 하고 있나?"
여전히 나를 괴롭히는 실수들
누구에게도 보여주기 전에 6개월 동안 구축 - 그들은 싫어했습니다
주요 업데이트 전에 데이터베이스를 백업하지 않음 - 무슨 일이 일어났는지 짐작할 수 있을 것입니다
배포 중 "작은 변경 하나만"에 예스라고 말하기 - 절대 작지 않습니다
이상한 임시방편들을 문서화하지 않음 - 미래의 나는 과거의 나를 저주했습니다
사용자가 있기 전에 최적화 - 병목은 결코 내가 생각한 곳이 아니었습니다
과거의 나에게 해주고 싶은 말
요구사항은 추측이지, 계약서가 아니다
완벽하지 않아도 매일 배포하라
의심스러우면, 더 간단하게 만들어라
그들이 외치는 기능이 필요한 것이 아닐 수도 있다
무엇이 아니라 왜를 문서화하라
설명하는 데 한 단락 이상이 필요하다면, 너무 복잡한 것이다
클라이언트의 혼란은 최고의 선생님이다
코드를 작성하는 만큼 열정적으로 삭제하라
간단하고 완료된 것이 완벽하지만 보류 중인 것을 이긴다
어차피 다시 만들 것이니, 첫 번째는 빠르게 만들어라
최종 결과
프로젝트는 여전히 매주 변합니다. 요구사항은 여전히 진화합니다. 클라이언트는 여전히 진행하면서 원하는 것을 발견합니다.
차이점은? 이제 나는 그것을 계획합니다.







